Many products exist today that reconcile software licenses to discovered software. However, current reconciliation engines fall short of delivering an accurate reconciliation for the following reasons. First, current methods do a poor job of recognizing that most licenses entitle one to install and/or use a set of software programs, not just a single program Second, current methods do not distinguish between those discovered installed entitled programs that should decrease the license pool from those that should not. Third, while some reconciliation engines embody the concept of program bundling, they miss the important relationships of the bundled program to the rest of the entitled software programs. Fourth, current methods miss the pervasive reuse of code that goes beyond the bundled program. Finally, current methods do not provide a way of distinguishing between enabled and/or functional installations and unusable and/or nonfunctional installations of software programs.